package cn.tedu.travelsystem.carpool.controller;

import cn.tedu.travelsystem.base.response.JsonResult;
import cn.tedu.travelsystem.carpool.mapper.CarPoolMapper;
import cn.tedu.travelsystem.carpool.pojo.dto.CarpoolParm;
//import cn.tedu.travelsystem.carpool.service.CarpoolService;
import cn.tedu.travelsystem.participation.controller.ParticipationController;
import cn.tedu.travelsystem.participation.pojo.dto.ParticipationParm;
import cn.tedu.travelsystem.participation.pojo.entity.Participation;
import cn.tedu.travelsystem.user.pojo.dto.UserRegParm;
import cn.tedu.travelsystem.carpool.pojo.entity.Carpool;
import cn.tedu.travelsystem.user.pojo.entity.User;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.Collections;
import java.util.Date;
import java.util.List;

@Slf4j
@RestController
@RequestMapping("/carpool")
@Api(tags = "03.拼车拼团模块")
public class CarpoolController {
//    @Autowired
//    private CarPoolMapper carPoolMapper;
//    @Autowired
//    private ParticipationController participationController;
//
//
//    @Autowired
//    private CarpoolService carpoolService;
//    @PostMapping("add")
//    @ApiOperation("增加信息")
//    @ApiOperationSupport(order = 10)
//    public JsonResult add(@Validated @RequestBody Carpool carpoolParm) {
//        try {
//            log.debug("userRegParam = " + carpoolParm);
//            Carpool carpool = new Carpool();
//            BeanUtils.copyProperties(carpoolParm, carpool);
//            carpool.setStartTime(new Date()); // 使用 java.util.Date 类
//            carPoolMapper.insertCarpool(carpool);
//            return JsonResult.ok();
//        } catch (Exception e) {
//            log.error("插入拼车信息失败", e);
//            return JsonResult.error("插入拼车信息失败");
//        }
//    }
//
//    @ApiOperationSupport(order = 50)
//    @ApiOperation("删除信息")
//    @DeleteMapping("delete/{carpoolId}") // 改成路径参数
//    @ResponseBody
//    public String delete(@PathVariable Long carpoolId) {
//        System.out.println(carpoolId);
//        int rows = carPoolMapper.deleteCarpool(carpoolId); // 执行删除并返回影响行数
//        if (rows > 0) {
//            return "删除成功";
//        } else {
//            return "删除失败，信息不存在或已被删除";
//        }
//    }
//
//    @GetMapping("detail/{carpoolId}")
//    @ApiOperation("根据ID查询拼车信息")
//    @ApiOperationSupport(order = 15)
//    @ResponseBody
//    public Carpool getById(@PathVariable Long carpoolId) {
//        Carpool carpool = carPoolMapper.getById(carpoolId);
//        return carpool; // 如果为 null，前端可自行判断
//    }
//
//    @PutMapping("update/{carpoolId}")
//    @ApiOperation("根据ID修改拼车信息")
//    @ApiOperationSupport(order = 20)
//    @ResponseBody
//    public String updateById(@PathVariable Long carpoolId, @RequestBody CarpoolParm carpoolParm) {
//        Carpool carpool = new Carpool();
//        BeanUtils.copyProperties(carpoolParm, carpool);
//        carpool.setCarpoolId(carpoolId); // 设置主键用于更新
//
//        int rows = carPoolMapper.updateCarpoolById(carpool);
//        if (rows > 0) {
//            return "修改成功";
//        } else {
//            return "修改失败，ID不存在";
//        }
//    }
//
//    // 新增行程匹配接口
//    // **新增行程匹配接口**
//    @GetMapping("match")
//    @ApiOperation("行程匹配")
//    @ApiOperationSupport(order = 25)
//    @ResponseBody
//    public JsonResult matchTrips(
//            @RequestParam String departure,
//            @RequestParam String destination,
//            @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date startTime) {
//        // 参数校验
//        if (departure == null || departure.trim().isEmpty() ||
//                destination == null || destination.trim().isEmpty() ||
//                startTime == null) {
//            return JsonResult.error("出发地、目的地和出发时间不能为空");
//        }
//
//        // 调用服务层获取匹配结果
//        List<Carpool> matchingCarpools = carpoolService.findMatchingCarpools(departure, destination, startTime);
//
//        if (matchingCarpools.isEmpty()) {
//            return JsonResult.ok("没有找到匹配的行程", Collections.emptyList());
//        }
//
//        return JsonResult.ok("找到" + matchingCarpools.size() + "个匹配的行程", matchingCarpools);
//    }
//
//    // 新增更新座位接口新增更新座位接口
//    // 新增更新座位接口
//    // 新增更新座位接口
//    @PutMapping("updateSeats/{carpoolId}")
//    @ApiOperation("更新座位信息（带乐观锁）")
//    @ApiOperationSupport(order = 30)
//    @ResponseBody
//    public String updateSeats(@PathVariable Long carpoolId) {
//        // 高并发场景下可以先检查Redis缓存
//        // if (!tryLockSeat(carpoolId)) {
//        //     return "座位已售罄";
//        // }
//
//        int maxRetries = 3;
//        for (int i = 0; i < maxRetries; i++) {
//            Carpool carpool = carPoolMapper.getById(carpoolId);
//            if (carpool == null) {
//                return "拼车信息不存在";
//            }
//
//            // 关键修复：使用原子性计算方式检查剩余座位
//            int remainingSeats = calculateRemainingSeats(carpool);
//            if (remainingSeats < 0) {
//                return "座位已售罄";
//            }
//
//            log.info("Attempt {}: carpoolId={}, remainingSeats={}",
//                    i+1, carpoolId, remainingSeats);
//
//            // 创建更新对象，只更新版本号
//            Carpool updatedCarpool = new Carpool();
//            updatedCarpool.setCarpoolId(carpoolId);
//            updatedCarpool.setVersion(carpool.getVersion());
//
//            // 执行更新，数据库层面会检查version和座位数
//            int rows = carPoolMapper.updateSeats(updatedCarpool);
//            if (rows > 0) {
//                // 更新成功后再次查询，确保获取最新状态
//                Carpool updated = carPoolMapper.getById(carpoolId);
//                int finalRemaining = calculateRemainingSeats(updated);
//                return "座位信息更新成功，剩余座位数: " + finalRemaining;
//            }
//
//            // 重试前等待，减少冲突
//            try {
//                Thread.sleep(100);
//            } catch (InterruptedException e) {
//                Thread.currentThread().interrupt();
//            }
//        }
//
//        return "更新失败，请稍后再试";
//    }
//    private int calculateRemainingSeats(Carpool carpool) {
//        if (carpool.getSeatsAvailable() == null || carpool.getCurrentParticipants() == null) {
//            return 0;
//        }
//        return (int) Math.max(0, carpool.getSeatsAvailable() - carpool.getCurrentParticipants());
//    }
//    // 新增选座接口
//    // 新增选座接口
//    @PostMapping("selectSeat/{carpoolId}")
//    @ApiOperation("选座并更新座位信息")
//    @ApiOperationSupport(order = 35)
//    @ResponseBody
//    public String selectSeat(@PathVariable Long carpoolId) {
//        ParticipationParm participationParm = new ParticipationParm();
//        participationParm.setCarpoolId(carpoolId);
//
//        JsonResult result = participationController.addP(participationParm);
//        // 假设 JsonResult 中有 getMessage 方法，成功时返回 "成功"
//        if ("成功".equals(result.getMessage())) {
//            Carpool carpool = carPoolMapper.getById(carpoolId);
//            return "选座成功，剩余座位数: " + carpool.getRemainingSeats();
//        } else {
//            return "选座失败，请稍后再试";
//        }
//    }
}